#!/usr/bin/env python

import consultasBD
import utiles
import DescripcionPagos
from decimal import Decimal, getcontext, ROUND_UP
import sincronizar_tabla


def procesarDevoluciones(listaDevoluciones,sucursal,clienteRegalo = None):
    
    nronotacredito = utiles.secuencia("vtas_nc", sucursal)
    totalnotacredito = Decimal("0.00")
    for item in listaDevoluciones:
        idnc = str(nronotacredito)
        fecha = str(utiles.getfechaInverse())
        idventa = str(item["idventa"])
        nrofactura = str(item["nrofactura"])
        idformaticket = str(item["idformaticket"])
        if clienteRegalo != None:
            idcliente = clienteRegalo['idcliente']
        else:
            idcliente = str(item["idcliente"])
        ptc = str(item["ptc"])
        descripcion = str(item["descri"])
        preciolista = str(item["preciolista"])
        descuento = item["preciolista"]*item["descuento"]/Decimal("100.00")
        preciofinal = Decimal(str(item["preciolista"]*item["devolucionactual"]-descuento*item["devolucionactual"])).quantize(Decimal("0.10"))
        totalnotacredito += preciofinal
        preciofinal = str(preciofinal)
        cantidad = str(item["devolucionactual"])
        
        #Actualizando tabla vtas_nc con nota de credito emitida
        sql = "INSERT INTO vtas_nc(idnc,fecha,idventa,nrofactura,idcliente,ptc,descripcion,preciolista,preciofinal,cantidad) "
        sql+= "VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')" % (idnc,fecha,idventa,nrofactura,idcliente,ptc,descripcion,preciolista,preciofinal,cantidad)
        consultasBD.executaSinCommit(None, sql)
        sincronizar_tabla.addChange(sql=sql)
        
        #Actualizando tabla ventastieneproductos con devoluciones realizadas
        devolver = item["devolucionanterior"]+item["devolucionactual"]
        sql = "UPDATE ventastieneproductos SET devuelto = '%s' WHERE idticket = '%s' AND nrofactura = '%s' AND ptc = '%s'" % (devolver,idventa,nrofactura,ptc)
        consultasBD.executaSinCommit(None, sql)
        sincronizar_tabla.addChange(sql=sql)
        
        #Introduciendo Credito a favor del cliente en el sistema de cuenta corriente
        preciofinal = (Decimal(preciofinal)*Decimal("-1.00")).quantize(Decimal("0.10"))
        tabla       = "vtas_ctasctes"
        campos      = "(idventa,nrofactura,vencimiento,idcliente,idformapagos,descripcion,cuota,montocuota,montopagado,idrecargo)"
        descripcion = "N.C. %s sobre ticket %s" % (idnc,nrofactura)
        valorescampos = "('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')" % (idventa,nrofactura,fecha,idcliente,'P',descripcion,'0',preciofinal,'0.00','-1')

        sql = "INSERT INTO "+tabla+campos+" VALUES "+valorescampos
        consultasBD.executaSinCommit(None, sql)
        sincronizar_tabla.addChange(sql=sql)
        
    return nronotacredito,idcliente
    
def procesarFacturaConsignaciones(listaConsignacion):
    #tiene por funcion eliminar lo consignado y que es facturado en Ventas.py 
    #tambien incrementa el stock por lo consignado y que es anulado (el decremento se hizo con el stock)
    for item in listaConsignacion:
        sql = "UPDATE ventastieneproductos SET devuelto = '%s' WHERE idticket = '%s' AND nrofactura = '%s' AND ptc = '%s'" % (item["cantidad"],item["idventa"],item["nrofactura"],item["ptc"])
        consultasBD.executaSinCommit(None, sql)
        sincronizar_tabla.addChange(sql=sql)            
        #obteniendo la sucursal donde se realizo la factura
        sql = "SELECT sucursal FROM ventastieneproductos WHERE idticket = '%s' AND nrofactura = '%s' AND ptc = '%s'" % (item["idventa"],item["nrofactura"],item["ptc"])
        sucursal = consultasBD.ordenCrudaDict(sql)[0]['sucursal']
        
        #recupero stock actual
        sql = "SELECT stock FROM stock WHERE ptc = '%s' AND sucursal = '%s'" % (item["ptc"],sucursal)
        stock = consultasBD.ordenCrudaDict(sql)[0]['stock']
        #incremento stock actual con lo devuelto
        nuevoStock = Decimal(str(stock)) + Decimal(str(item['cantidad']))
        #actualizo el stock del producto devuelto
        sql = "UPDATE stock SET stock = '%s' WHERE ptc = '%s' AND sucursal = '%s'" % (nuevoStock,item["ptc"],sucursal)
        consultasBD.executaSinCommit(None, sql)
        sincronizar_tabla.addChange(sql=sql)            
        


    
    
    
    

    





